package com.example.demo.pojo.dto.dingtalk;

import cn.hutool.core.util.StrUtil;
import com.example.demo.enums.DingMsgTypeEnum;
import lombok.Data;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * 钉钉机器人link类型消息通知请求dto
 *
 * @author TongDaShuai
 * @since 2021/12/14
 */
@Data
public class LinkReqDto extends BaseRobotMsgNotifyReqDto {


    /**
     * link类型消息
     */
    private LinkDto link;

    /**
     * 构建请求参数
     *
     * @return
     */
    public static LinkReqDto build() {
        LinkReqDto req = new LinkReqDto();
        req.setMsgtype(DingMsgTypeEnum.link.name());
        return req;
    }



    /**
     * 设置 消息内容
     *
     * @param text 消息内容。如果太长只会部分展示。
     * @return
     */
    public LinkReqDto text(String text) {
        if (this.link == null) {
            this.link = new LinkDto();
        }
        this.link.text = text;
        return this;
    }

    /**
     * 设置 消息标题
     *
     * @param title 消息标题
     * @return
     */
    public LinkReqDto title(String title) {
        if (this.link == null) {
            this.link = new LinkDto();
        }
        this.link.title = title;
        return this;
    }

    /**
     * 设置 图片URL
     *
     * @param picUrl 图片URL
     * @return
     */
    public LinkReqDto picUrl(String picUrl) {
        if (this.link == null) {
            this.link = new LinkDto();
        }
        this.link.picUrl = picUrl;
        return this;
    }

    /**
     * 设置 点击消息跳转的URL
     *
     * @param messageUrl 点击消息跳转的URL
     * @param pcSlide true,表示在PC客户端侧边栏打开;false：表示在浏览器打开
     * @return
     */
    public LinkReqDto messageUrl(String messageUrl, boolean pcSlide) throws UnsupportedEncodingException {
        if (this.link == null) {
            this.link = new LinkDto();
        }
        String encUrl = URLEncoder.encode(messageUrl, "UTF-8");
        this.link.messageUrl = StrUtil.format("dingtalk://dingtalkclient/page/link?url={}&pc_slide={}", encUrl, pcSlide);
        return this;
    }

    /**
     * 设置 点击消息跳转的URL(默认在浏览器打开)
     *
     * @param messageUrl 点击消息跳转的URL
     * @return
     */
    public LinkReqDto messageUrl(String messageUrl) throws UnsupportedEncodingException {
        return messageUrl(messageUrl, false);
    }


    @Data
    public static class LinkDto {

        /**
         * 消息内容。如果太长只会部分展示。
         */
        private String text;

        /**
         * 消息标题。
         */
        private String title;

        /**
         * 图片URL。
         */
        private String picUrl;

        /**
         * 点击消息跳转的URL，打开方式如下：
         * 移动端，在钉钉客户端内打开
         * PC端
         * 默认侧边栏打开
         * 希望在外部浏览器打开，请参考消息链接说明:https://open.dingtalk.com/document/orgapp-server/message-link-description
         */
        private String messageUrl;
    }


}
